package MIPS;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */

/*
 * panelHilo.java
 *
 * Created on 23/10/2012, 06:07:19 PM
 */
import java.awt.Color;
import java.awt.Graphics;
import java.util.concurrent.Semaphore;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Etapa extends javax.swing.JPanel implements Runnable {

    private String texto;
    private int quienSoy;
    public pizarra izquierda = null;
    public pizarra derecha = null;
    public Semaphore organizador = null;
    public Semaphore principal = null;
    boolean esperar = true;
    boolean cambio = false;
    public boolean atrasado = false;

    

    /**
     * Creates new form panelHilo
     */
    public Etapa(int e, pizarra i, pizarra d, Semaphore org, Semaphore prin) {
        quienSoy = e;
        izquierda = i;
        derecha = d;
        texto = "";
        organizador = org;
        principal = prin;
    }

    
    public boolean estaAtrasado() {
        return atrasado;
    }

    public void setAtrasado(boolean atrasado) {
        this.atrasado = atrasado;
    }
    
    public pizarra getDerecha() {
        return derecha;
    }

    public void setDerecha(pizarra derecha) {
        this.derecha = derecha;
    }

    public pizarra getIzquierda() {
        return izquierda;
    }

    public void setIzquierda(pizarra izquierda) {
        this.izquierda = izquierda;
    }

    public Semaphore getOrganizador() {
        return organizador;
    }

    public void setOrganizador(Semaphore organizador) {
        this.organizador = organizador;
    }

    public Semaphore getPrincipal() {
        return principal;
    }

    public void setPrincipal(Semaphore principal) {
        this.principal = principal;
    }

    public int getQuienSoy() {
        return quienSoy;
    }

    public void setQuienSoy(int quienSoy) {
        this.quienSoy = quienSoy;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }
    
     public boolean getCambio() {
        return cambio;
    }

    public Etapa() {
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        String tmp = "Yo soy el hilo: " + quienSoy + " y tengo el texto: " + texto;
        g.drawString(tmp, (this.getHeight() - tmp.length()) / 2, (this.getWidth() - tmp.length()) / 2);

    }

    @Override
    public void run() {
        while (true) {
            try {
                organizador.acquire();
                if (izquierda != null) {
                    synchronized (izquierda) {
                        izquierda.lock();
                            texto = izquierda.getText();
                            System.out.println("Desde: " + quienSoy + " izq " + texto);
                            izquierda.setText("");
                            izquierda.setCopiado(true);
                            //todos lo cambios del hilo en la pizarra
                        
                        izquierda.unLock();
                    }

                }
       
                if (derecha != null) {
                    
                    esperar = true;
                    while (esperar) {
                        synchronized (derecha) {
                            derecha.lock();
                            if (derecha.getCopiado()) {
                                esperar = false;
                                if (texto.compareTo("") != 0) {
                                    derecha.setText(texto);
                                    //repaint();
                                    texto = "";
                                }
                                System.out.println("Desde: " + quienSoy + " der " + texto);
                            }
                            derecha.unLock();
                        }
                    }
                }
                principal.release();
                //    System.out.println("Saludos desde: " + quienSoy);
                //     this.repaint();
            } catch (InterruptedException ex) {
                Logger.getLogger(Etapa.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

    public void setText(String txt) {
        this.texto = txt;
    }
}
